package tp1

import scala.collection.mutable.ArrayBuffer

class Materia(var nombreMateria: String) { 
	var m_cursos = ArrayBuffer[Curso]()
	
	def agregarCurso(anio: Int, cuatrimestre: Int, cupo:Int, docentes:ArrayBuffer[Docente]){
	  m_cursos += new Curso(false,anio,cuatrimestre,cupo,docentes)
	}
	
	def cantCursosDelAnioYCuatrimestre(c_anio:Int, c_cuatrimestre:Int):Int ={
	  	  var listaCantCursadas = for{ each <- m_cursos if each.anio == c_anio && each.cuatrimestre == c_cuatrimestre
	  	  				  }yield each
	  	  listaCantCursadas.size
	}
	
	def econtrarNotasDeAlumno(b_alumno:Alumno):ArrayBuffer[Nota]={
	  var listaDeNotas = for{each <- m_cursos if each.estaAlumno(b_alumno) && each.termino}yield each.obtenerNotaAlumno(b_alumno)
	  listaDeNotas
	}
	
	def inscribirAlumno(n_alumno:Alumno){
	  var cursosAbiertos = for{each <- m_cursos if !each.termino}yield each
			  if(!this.estaAlumno(cursosAbiertos, n_alumno)){
				  var curso = for{ each <- cursosAbiertos if(each.sePuedeInscribir)}yield each
				  curso.head.inscribirAlumno(n_alumno)
				  n_alumno.agregarMateria(this)
			  }
	}

	def ponerNotaAAlumno(b_alumno:Alumno, nota:Int){
	  for{each <- m_cursos if!each.termino && each.estaAlumno(b_alumno)}yield each.colocarNota(b_alumno, nota)
	}
	
	def cerrarCursos(anio:Int, cuatrimestre:Int){
	  for{each <- m_cursos if !each.termino && each.anio == anio && each.cuatrimestre == cuatrimestre}yield each.cerrarCurso
	}
	
	def aproboMateria(b_alumno:Alumno):Boolean ={
	  var ret = for{each <- m_cursos if each.estaAlumno(b_alumno) && each.aprobo(b_alumno)}yield each
	  ret.size > 0
	}
	
	def cantidadAbandonos(b_alumno:Alumno):Int ={
	  var ret = for{each <- m_cursos if each.termino && each.estaAlumno(b_alumno) && each.abandono(b_alumno)}yield each
	  ret.size
	}
	
	def estaAlumno(cursos:ArrayBuffer[Curso],b_alumno:Alumno):Boolean ={
	  var ret = for{each <- m_cursos if each.estaAlumno(b_alumno)}yield each
	  ret.size > 0
	}
}